0x610180604052348015610010575f5ffd5b506040518060400160405280600681526020017f4269674275670000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f42696742756700000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f424742000000000000000000000000000000000000000000000000000000000081525081600390816100f991906107f9565b50806004908161010991906107f9565b50505061012060058361020160201b90919060201c565b610120818152505061013c60068261020160201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a0818152505061017961024e60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050505f6101c66102a860201b60201c565b600a6101d29190610a30565b620f42406101e09190610a7a565b90508061016081815250506101fb33826102b060201b60201c565b50610d25565b5f6020835110156102225761021b8361033560201b60201c565b9050610248565b826102328361039a60201b60201c565b5f01908161024091906107f9565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e05161010051463060405160200161028d959493929190610b21565b60405160208183030381529060405280519060200120905090565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610320575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103179190610b72565b60405180910390fd5b6103315f83836103a360201b60201c565b5050565b5f5f829050601f8151111561038157826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016103789190610bf1565b60405180910390fd5b80518161038d90610c3e565b5f1c175f1b915050919050565b5f819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103f3578060025f8282546103e79190610ca4565b925050819055506104c1565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561047c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161047393929190610cd7565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610508578060025f8282540392505081905550610552565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105af9190610d0c565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061063757607f821691505b60208210810361064a576106496105f3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106ac7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610671565b6106b68683610671565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106fa6106f56106f0846106ce565b6106d7565b6106ce565b9050919050565b5f819050919050565b610713836106e0565b61072761071f82610701565b84845461067d565b825550505050565b5f5f905090565b61073e61072f565b61074981848461070a565b505050565b5b8181101561076c576107615f82610736565b60018101905061074f565b5050565b601f8211156107b15761078281610650565b61078b84610662565b8101602085101561079a578190505b6107ae6107a685610662565b83018261074e565b50505b505050565b5f82821c905092915050565b5f6107d15f19846008026107b6565b1980831691505092915050565b5f6107e983836107c2565b9150826002028217905092915050565b610802826105bc565b67ffffffffffffffff81111561081b5761081a6105c6565b5b6108258254610620565b610830828285610770565b5f60209050601f831160018114610861575f841561084f578287015190505b61085985826107de565b8655506108c0565b601f19841661086f86610650565b5f5b8281101561089657848901518255600182019150602085019450602081019050610871565b868310156108b357848901516108af601f8916826107c2565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561094a57808604811115610926576109256108c8565b5b60018516156109355780820291505b8081029050610943856108f5565b945061090a565b94509492505050565b5f826109625760019050610a1d565b8161096f575f9050610a1d565b8160018114610985576002811461098f576109be565b6001915050610a1d565b60ff8411156109a1576109a06108c8565b5b8360020a9150848211156109b8576109b76108c8565b5b50610a1d565b5060208310610133831016604e8410600b84101617156109f35782820a9050838111156109ee576109ed6108c8565b5b610a1d565b610a008484846001610901565b92509050818404811115610a1757610a166108c8565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610a3a826106ce565b9150610a4583610a24565b9250610a727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610953565b905092915050565b5f610a84826106ce565b9150610a8f836106ce565b9250828202610a9d816106ce565b91508282048414831517610ab457610ab36108c8565b5b5092915050565b5f819050919050565b610acd81610abb565b82525050565b610adc816106ce565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b0b82610ae2565b9050919050565b610b1b81610b01565b82525050565b5f60a082019050610b345f830188610ac4565b610b416020830187610ac4565b610b4e6040830186610ac4565b610b5b6060830185610ad3565b610b686080830184610b12565b9695505050505050565b5f602082019050610b855f830184610b12565b92915050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610bc3826105bc565b610bcd8185610b8b565b9350610bdd818560208601610b9b565b610be681610ba9565b840191505092915050565b5f6020820190508181035f830152610c098184610bb9565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f610c358251610abb565b80915050919050565b5f610c4882610c11565b82610c5284610c1b565b9050610c5d81610c2a565b92506020821015610c9d57610c987fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802610671565b831692505b5050919050565b5f610cae826106ce565b9150610cb9836106ce565b9250828201905080821115610cd157610cd06108c8565b5b92915050565b5f606082019050610cea5f830186610b12565b610cf76020830185610ad3565b610d046040830184610ad3565b949350505050565b5f602082019050610d1f5f830184610ad3565b92915050565b60805160a05160c05160e05161010051610120516101405161016051611bb1610d805f395f6104fc01525f610a7201525f610a3701525f610f6b01525f610f4a01525f61093501525f61098b01525f6109b40152611bb15ff3fe608060405234801561000f575f5ffd5b50600436106100e8575f3560e01c80637ecebe001161008a57806395d89b411161006457806395d89b4114610266578063a9059cbb14610284578063d505accf146102b4578063dd62ed3e146102d0576100e8565b80637ecebe00146101f457806384b0196e14610224578063902d55a514610248576100e8565b806323b872dd116100c657806323b872dd14610158578063313ce567146101885780633644e515146101a657806370a08231146101c4576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f5ffd5b6100f4610300565b6040516101019190611421565b60405180910390f35b610124600480360381019061011f91906114d2565b610390565b604051610131919061152a565b60405180910390f35b6101426103b2565b60405161014f9190611552565b60405180910390f35b610172600480360381019061016d919061156b565b6103bb565b60405161017f919061152a565b60405180910390f35b6101906103e9565b60405161019d91906115d6565b60405180910390f35b6101ae6103f1565b6040516101bb9190611607565b60405180910390f35b6101de60048036038101906101d99190611620565b6103ff565b6040516101eb9190611552565b60405180910390f35b61020e60048036038101906102099190611620565b610444565b60405161021b9190611552565b60405180910390f35b61022c610455565b60405161023f979695949392919061174b565b60405180910390f35b6102506104fa565b60405161025d9190611552565b60405180910390f35b61026e61051e565b60405161027b9190611421565b60405180910390f35b61029e600480360381019061029991906114d2565b6105ae565b6040516102ab919061152a565b60405180910390f35b6102ce60048036038101906102c99190611821565b6105d0565b005b6102ea60048036038101906102e591906118be565b610715565b6040516102f79190611552565b60405180910390f35b60606003805461030f90611929565b80601f016020809104026020016040519081016040528092919081815260200182805461033b90611929565b80156103865780601f1061035d57610100808354040283529160200191610386565b820191905f5260205f20905b81548152906001019060200180831161036957829003601f168201915b5050505050905090565b5f5f61039a610797565b90506103a781858561079e565b600191505092915050565b5f600254905090565b5f5f6103c5610797565b90506103d28582856107b0565b6103dd858585610842565b60019150509392505050565b5f6012905090565b5f6103fa610932565b905090565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f61044e826109e8565b9050919050565b5f6060805f5f5f6060610466610a2e565b61046e610a69565b46305f5f1b5f67ffffffffffffffff81111561048d5761048c611959565b5b6040519080825280602002602001820160405280156104bb5781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606004805461052d90611929565b80601f016020809104026020016040519081016040528092919081815260200182805461055990611929565b80156105a45780601f1061057b576101008083540402835291602001916105a4565b820191905f5260205f20905b81548152906001019060200180831161058757829003601f168201915b5050505050905090565b5f5f6105b8610797565b90506105c5818585610842565b600191505092915050565b8342111561061557836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161060c9190611552565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886106438c610aa4565b8960405160200161065996959493929190611986565b6040516020818303038152906040528051906020012090505f61067b82610af7565b90505f61068a82878787610b10565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106fe57808a6040517f4b800e460000000000000000000000000000000000000000000000000000000081526004016106f59291906119e5565b60405180910390fd5b6107098a8a8a61079e565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6107ab8383836001610b3e565b505050565b5f6107bb8484610715565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461083c578181101561082d578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161082493929190611a0c565b60405180910390fd5b61083b84848484035f610b3e565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108b2575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108a99190611a41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610922575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016109199190611a41565b60405180910390fd5b61092d838383610d0d565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156109ad57507f000000000000000000000000000000000000000000000000000000000000000046145b156109da577f000000000000000000000000000000000000000000000000000000000000000090506109e5565b6109e2610f26565b90505b90565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060610a6460057f0000000000000000000000000000000000000000000000000000000000000000610fbb90919063ffffffff16565b905090565b6060610a9f60067f0000000000000000000000000000000000000000000000000000000000000000610fbb90919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f610b09610b03610932565b83611068565b9050919050565b5f5f5f5f610b20888888886110a8565b925092509250610b30828261118f565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610bae575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610ba59190611a41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c1e575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610c159190611a41565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610d07578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610cfe9190611552565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d5d578060025f828254610d519190611a87565b92505081905550610e2b565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610de6578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610ddd93929190611a0c565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e72578060025f8282540392505081905550610ebc565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f199190611552565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000004630604051602001610fa0959493929190611aba565b60405160208183030381529060405280519060200120905090565b606060ff5f1b8314610fd757610fd0836112f1565b9050611062565b818054610fe390611929565b80601f016020809104026020016040519081016040528092919081815260200182805461100f90611929565b801561105a5780601f106110315761010080835404028352916020019161105a565b820191905f5260205f20905b81548152906001019060200180831161103d57829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f5f5f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156110e4575f600385925092509250611185565b5f6001888888886040515f81526020016040526040516111079493929190611b0b565b6020604051602081039080840390855afa158015611127573d5f5f3e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611178575f60015f5f1b93509350935050611185565b805f5f5f1b935093509350505b9450945094915050565b5f60038111156111a2576111a1611b4e565b5b8260038111156111b5576111b4611b4e565b5b03156112ed57600160038111156111cf576111ce611b4e565b5b8260038111156111e2576111e1611b4e565b5b03611219576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600381111561122d5761122c611b4e565b5b8260038111156112405761123f611b4e565b5b0361128457805f1c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161127b9190611552565b60405180910390fd5b60038081111561129757611296611b4e565b5b8260038111156112aa576112a9611b4e565b5b036112ec57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016112e39190611607565b60405180910390fd5b5b5050565b60605f6112fd83611363565b90505f602067ffffffffffffffff81111561131b5761131a611959565b5b6040519080825280601f01601f19166020018201604052801561134d5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f5f60ff835f1c169050601f8111156113a8576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6113f3826113b1565b6113fd81856113bb565b935061140d8185602086016113cb565b611416816113d9565b840191505092915050565b5f6020820190508181035f83015261143981846113e9565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61146e82611445565b9050919050565b61147e81611464565b8114611488575f5ffd5b50565b5f8135905061149981611475565b92915050565b5f819050919050565b6114b18161149f565b81146114bb575f5ffd5b50565b5f813590506114cc816114a8565b92915050565b5f5f604083850312156114e8576114e7611441565b5b5f6114f58582860161148b565b9250506020611506858286016114be565b9150509250929050565b5f8115159050919050565b61152481611510565b82525050565b5f60208201905061153d5f83018461151b565b92915050565b61154c8161149f565b82525050565b5f6020820190506115655f830184611543565b92915050565b5f5f5f6060848603121561158257611581611441565b5b5f61158f8682870161148b565b93505060206115a08682870161148b565b92505060406115b1868287016114be565b9150509250925092565b5f60ff82169050919050565b6115d0816115bb565b82525050565b5f6020820190506115e95f8301846115c7565b92915050565b5f819050919050565b611601816115ef565b82525050565b5f60208201905061161a5f8301846115f8565b92915050565b5f6020828403121561163557611634611441565b5b5f6116428482850161148b565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b61167f8161164b565b82525050565b61168e81611464565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6116c68161149f565b82525050565b5f6116d783836116bd565b60208301905092915050565b5f602082019050919050565b5f6116f982611694565b611703818561169e565b935061170e836116ae565b805f5b8381101561173e57815161172588826116cc565b9750611730836116e3565b925050600181019050611711565b5085935050505092915050565b5f60e08201905061175e5f83018a611676565b818103602083015261177081896113e9565b9050818103604083015261178481886113e9565b90506117936060830187611543565b6117a06080830186611685565b6117ad60a08301856115f8565b81810360c08301526117bf81846116ef565b905098975050505050505050565b6117d6816115bb565b81146117e0575f5ffd5b50565b5f813590506117f1816117cd565b92915050565b611800816115ef565b811461180a575f5ffd5b50565b5f8135905061181b816117f7565b92915050565b5f5f5f5f5f5f5f60e0888a03121561183c5761183b611441565b5b5f6118498a828b0161148b565b975050602061185a8a828b0161148b565b965050604061186b8a828b016114be565b955050606061187c8a828b016114be565b945050608061188d8a828b016117e3565b93505060a061189e8a828b0161180d565b92505060c06118af8a828b0161180d565b91505092959891949750929550565b5f5f604083850312156118d4576118d3611441565b5b5f6118e18582860161148b565b92505060206118f28582860161148b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061194057607f821691505b602082108103611953576119526118fc565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c0820190506119995f8301896115f8565b6119a66020830188611685565b6119b36040830187611685565b6119c06060830186611543565b6119cd6080830185611543565b6119da60a0830184611543565b979650505050505050565b5f6040820190506119f85f830185611685565b611a056020830184611685565b9392505050565b5f606082019050611a1f5f830186611685565b611a2c6020830185611543565b611a396040830184611543565b949350505050565b5f602082019050611a545f830184611685565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a918261149f565b9150611a9c8361149f565b9250828201905080821115611ab457611ab3611a5a565b5b92915050565b5f60a082019050611acd5f8301886115f8565b611ada60208301876115f8565b611ae760408301866115f8565b611af46060830185611543565b611b016080830184611685565b9695505050505050565b5f608082019050611b1e5f8301876115f8565b611b2b60208301866115c7565b611b3860408301856115f8565b611b4560608301846115f8565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea2646970667358221220ad6b93e2628fbcb24ec7a72e0477ec22dc610e68aa6608347e892db2e1a5e6dd64736f6c634300081c0033