60806040526019600a556019600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055506001601360176101000a81548160ff0219169083151502179055503480156200007657600080fd5b506040518060400160405280600681526020017f4b65726d697400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4b45524d495400000000000000000000000000000000000000000000000000008152508160039081620000f4919062000872565b50806004908162000106919062000872565b505050620001296200011d6200037e60201b60201c565b6200038660201b60201c565b6000695915a68d88da6a08000090506103e8600f826200014a919062000988565b62000156919062000a02565b600e819055506103e8600f826200016e919062000988565b6200017a919062000a02565b600f8190555061271060058262000192919062000988565b6200019e919062000a02565b60108190555061271060c882620001b6919062000988565b620001c2919062000a02565b60118190555073cecbd357d3efaf7f6f65119a700ab732b5a93793600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620002336200044c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003776200036a6200037e60201b60201c565b826200047660201b60201c565b5062000b26565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004df9062000a9b565b60405180910390fd5b620004fc60008383620005ee60201b60201c565b806002600082825462000510919062000abd565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000567919062000abd565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005ce919062000b09565b60405180910390a3620005ea60008383620005f360201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067a57607f821691505b60208210810362000690576200068f62000632565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006bb565b620007068683620006bb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007536200074d62000747846200071e565b62000728565b6200071e565b9050919050565b6000819050919050565b6200076f8362000732565b620007876200077e826200075a565b848454620006c8565b825550505050565b600090565b6200079e6200078f565b620007ab81848462000764565b505050565b5b81811015620007d357620007c760008262000794565b600181019050620007b1565b5050565b601f8211156200082257620007ec8162000696565b620007f784620006ab565b8101602085101562000807578190505b6200081f6200081685620006ab565b830182620007b0565b50505b505050565b600082821c905092915050565b6000620008476000198460080262000827565b1980831691505092915050565b600062000862838362000834565b9150826002028217905092915050565b6200087d82620005f8565b67ffffffffffffffff81111562000899576200089862000603565b5b620008a5825462000661565b620008b2828285620007d7565b600060209050601f831160018114620008ea5760008415620008d5578287015190505b620008e1858262000854565b86555062000951565b601f198416620008fa8662000696565b60005b828110156200092457848901518255600182019150602085019450602081019050620008fd565b8683101562000944578489015162000940601f89168262000834565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000995826200071e565b9150620009a2836200071e565b9250828202620009b2816200071e565b91508282048414831517620009cc57620009cb62000959565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a0f826200071e565b915062000a1c836200071e565b92508262000a2f5762000a2e620009d3565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a83601f8362000a3a565b915062000a908262000a4b565b602082019050919050565b6000602082019050818103600083015262000ab68162000a74565b9050919050565b600062000aca826200071e565b915062000ad7836200071e565b925082820190508082111562000af25762000af162000959565b5b92915050565b62000b03816200071e565b82525050565b600060208201905062000b20600083018462000af8565b92915050565b6144a18062000b366000396000f3fe6080604052600436106101a05760003560e01c806370a08231116100ec57806395d89b411161008a578063ae60148011610064578063ae60148014610583578063c9567bf9146105b3578063dd62ed3e146105ca578063f2fde38b14610607576101a7565b806395d89b41146104de578063a457c2d714610509578063a9059cbb14610546576101a7565b80638b638426116100c65780638b6384261461045c5780638da5cb5b146104735780638e0903331461049e5780638f937cc4146104c7576101a7565b806370a08231146103f1578063715018a61461042e578063751039fc14610445576101a7565b806318160ddd11610159578063313ce56711610133578063313ce5671461033757806332ad809614610362578063395093511461038b5780635f6e36e2146103c8576101a7565b806318160ddd146102a65780631d3d5a53146102d157806323b872dd146102fa576101a7565b806303d948f8146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630b76d5451461022b5780630b78f9c0146102545780630d53b4751461027d576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610630565b005b3480156101cf57600080fd5b506101d8610728565b6040516101e59190612f7a565b60405180910390f35b3480156101fa57600080fd5b506102156004803603810190610210919061303a565b6107ba565b6040516102229190613095565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190613141565b6107d8565b005b34801561026057600080fd5b5061027b600480360381019061027691906131a1565b6108f9565b005b34801561028957600080fd5b506102a4600480360381019061029f91906131a1565b610a48565b005b3480156102b257600080fd5b506102bb610b4d565b6040516102c891906131f0565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f3919061320b565b610b57565b005b34801561030657600080fd5b50610321600480360381019061031c9190613238565b610c79565b60405161032e9190613095565b60405180910390f35b34801561034357600080fd5b5061034c610d71565b60405161035991906132a7565b60405180910390f35b34801561036e57600080fd5b506103896004803603810190610384919061320b565b610d7a565b005b34801561039757600080fd5b506103b260048036038101906103ad919061303a565b610e9c565b6040516103bf9190613095565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190613300565b610f48565b005b3480156103fd57600080fd5b506104186004803603810190610413919061332d565b61103f565b60405161042591906131f0565b60405180910390f35b34801561043a57600080fd5b50610443611087565b005b34801561045157600080fd5b5061045a61110f565b005b34801561046857600080fd5b50610471611225565b005b34801561047f57600080fd5b50610488611320565b6040516104959190613369565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613384565b61134a565b005b3480156104d357600080fd5b506104dc61145a565b005b3480156104ea57600080fd5b506104f3611558565b6040516105009190612f7a565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b919061303a565b6115ea565b60405161053d9190613095565b60405180910390f35b34801561055257600080fd5b5061056d6004803603810190610568919061303a565b6116d5565b60405161057a9190613095565b60405180910390f35b34801561058f57600080fd5b506105986116f3565b6040516105aa969594939291906133c4565b60405180910390f35b3480156105bf57600080fd5b506105c8611722565b005b3480156105d657600080fd5b506105f160048036038101906105ec9190613425565b611ce0565b6040516105fe91906131f0565b60405180910390f35b34801561061357600080fd5b5061062e6004803603810190610629919061332d565b611d67565b005b610638611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610656611320565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906134b1565b60405180910390fd5b601360179054906101000a900460ff166106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f29061351d565b60405180910390fd5b6019600a819055506019600b819055506000601360176101000a81548160ff021916908315150217905550565b6060600380546107379061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546107639061356c565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b60006107ce6107c7611e5e565b8484611e66565b6001905092915050565b6107e0611e5e565b73ffffffffffffffffffffffffffffffffffffffff166107fe611320565b73ffffffffffffffffffffffffffffffffffffffff1614610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906134b1565b60405180910390fd5b60005b838390508110156108f357816014600086868581811061087a5761087961359d565b5b905060200201602081019061088f919061332d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806108eb906135fb565b915050610857565b50505050565b610901611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661091f611320565b73ffffffffffffffffffffffffffffffffffffffff1614610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096c906134b1565b60405180910390fd5b60638211156109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b09061368f565b60405180910390fd5b60638111156109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f4906136fb565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051610a3c92919061371b565b60405180910390a15050565b610a50611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610a6e611320565b73ffffffffffffffffffffffffffffffffffffffff1614610ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abb906134b1565b60405180910390fd5b61271082610ad0610b4d565b610ada9190613744565b610ae491906137b5565b60108190555061271081610af6610b4d565b610b009190613744565b610b0a91906137b5565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb18282604051610b4192919061371b565b60405180910390a15050565b6000600254905090565b610b5f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610b7d611320565b73ffffffffffffffffffffffffffffffffffffffff1614610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca906134b1565b60405180910390fd5b6001811015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e90613832565b60405180910390fd5b6103e881610c23610b4d565b610c2d9190613744565b610c3791906137b5565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610c6e91906131f0565b60405180910390a150565b6000610c8684848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cd1611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d48906138c4565b60405180910390fd5b610d6585610d5d611e5e565b858403611e66565b60019150509392505050565b60006009905090565b610d82611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610da0611320565b73ffffffffffffffffffffffffffffffffffffffff1614610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906134b1565b60405180910390fd5b6001811015610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190613956565b60405180910390fd5b6103e881610e46610b4d565b610e509190613744565b610e5a91906137b5565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f54604051610e9191906131f0565b60405180910390a150565b6000610f3e610ea9611e5e565b848460016000610eb7611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f399190613976565b611e66565b6001905092915050565b610f50611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610f6e611320565b73ffffffffffffffffffffffffffffffffffffffff1614610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb906134b1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516110349190613a09565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61108f611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110ad611320565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa906134b1565b60405180910390fd5b61110d60006127f8565b565b611117611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611135611320565b73ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611182906134b1565b60405180910390fd5b611193610b4d565b600e819055506111a1610b4d565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6111d0610b4d565b6040516111dd91906131f0565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161120e610b4d565b60405161121b91906131f0565b60405180910390a1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ac90613a70565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561131d573d6000803e3d6000fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611352611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611370611320565b73ffffffffffffffffffffffffffffffffffffffff16146113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd906134b1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa9828260405161144e929190613a90565b60405180910390a15050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114e857506114b9611320565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151e90613a70565b60405180910390fd5b60006115323061103f565b905061153d816128be565b6000479050600081111561155457611553612b60565b5b5050565b6060600480546115679061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546115939061356c565b80156115e05780601f106115b5576101008083540402835291602001916115e0565b820191906000526020600020905b8154815290600101906020018083116115c357829003601f168201915b5050505050905090565b600080600160006115f9611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156116b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ad90613b2b565b60405180910390fd5b6116ca6116c1611e5e565b85858403611e66565b600191505092915050565b60006116e96116e2611e5e565b848461202f565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b61172a611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611748611320565b73ffffffffffffffffffffffffffffffffffffffff161461179e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611795906134b1565b60405180910390fd5b601360149054906101000a900460ff16156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613b97565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061187730601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611872610b4d565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190613bcc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611991573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b59190613bcc565b6040518363ffffffff1660e01b81526004016119d2929190613bf9565b6020604051808303816000875af11580156119f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a159190613bcc565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611a9e3061103f565b600080611aa9611320565b426040518863ffffffff1660e01b8152600401611acb96959493929190613c5d565b60606040518083038185885af1158015611ae9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b0e9190613cd3565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611bb0929190613d26565b6020604051808303816000875af1158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190613d64565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d6f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611d8d611320565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906134b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613e03565b60405180910390fd5b611e5b816127f8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202291906131f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a611320565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c85750612198611320565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e8561103f565b6124689190613976565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b99190613976565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e6906135fb565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a68561103f565b6125b09190613976565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b63061103f565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b50905030816000815181106129655761296461359d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190613bcc565b81600181518110612a4457612a4361359d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c019190613744565b905092915050565b60008183612c1791906137b5565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d9190613976565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb191906131f0565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f24578082015181840152602081019050612f09565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4c82612eea565b612f568185612ef5565b9350612f66818560208601612f06565b612f6f81612f30565b840191505092915050565b60006020820190508181036000830152612f948184612f41565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd182612fa6565b9050919050565b612fe181612fc6565b8114612fec57600080fd5b50565b600081359050612ffe81612fd8565b92915050565b6000819050919050565b61301781613004565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000806040838503121561305157613050612f9c565b5b600061305f85828601612fef565b925050602061307085828601613025565b9150509250929050565b60008115159050919050565b61308f8161307a565b82525050565b60006020820190506130aa6000830184613086565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130d5576130d46130b0565b5b8235905067ffffffffffffffff8111156130f2576130f16130b5565b5b60208301915083602082028301111561310e5761310d6130ba565b5b9250929050565b61311e8161307a565b811461312957600080fd5b50565b60008135905061313b81613115565b92915050565b60008060006040848603121561315a57613159612f9c565b5b600084013567ffffffffffffffff81111561317857613177612fa1565b5b613184868287016130bf565b935093505060206131978682870161312c565b9150509250925092565b600080604083850312156131b8576131b7612f9c565b5b60006131c685828601613025565b92505060206131d785828601613025565b9150509250929050565b6131ea81613004565b82525050565b600060208201905061320560008301846131e1565b92915050565b60006020828403121561322157613220612f9c565b5b600061322f84828501613025565b91505092915050565b60008060006060848603121561325157613250612f9c565b5b600061325f86828701612fef565b935050602061327086828701612fef565b925050604061328186828701613025565b9150509250925092565b600060ff82169050919050565b6132a18161328b565b82525050565b60006020820190506132bc6000830184613298565b92915050565b60006132cd82612fa6565b9050919050565b6132dd816132c2565b81146132e857600080fd5b50565b6000813590506132fa816132d4565b92915050565b60006020828403121561331657613315612f9c565b5b6000613324848285016132eb565b91505092915050565b60006020828403121561334357613342612f9c565b5b600061335184828501612fef565b91505092915050565b61336381612fc6565b82525050565b600060208201905061337e600083018461335a565b92915050565b6000806040838503121561339b5761339a612f9c565b5b60006133a985828601612fef565b92505060206133ba8582860161312c565b9150509250929050565b600060c0820190506133d960008301896131e1565b6133e660208301886131e1565b6133f360408301876131e1565b61340060608301866131e1565b61340d60808301856131e1565b61341a60a08301846131e1565b979650505050505050565b6000806040838503121561343c5761343b612f9c565b5b600061344a85828601612fef565b925050602061345b85828601612fef565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061349b602083612ef5565b91506134a682613465565b602082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613507601f83612ef5565b9150613512826134d1565b602082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061358457607f821691505b6020821081036135975761359661353d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061360682613004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613638576136376135cc565b5b600182019050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613679601583612ef5565b915061368482613643565b602082019050919050565b600060208201905081810360008301526136a88161366c565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006136e5601683612ef5565b91506136f0826136af565b602082019050919050565b60006020820190508181036000830152613714816136d8565b9050919050565b600060408201905061373060008301856131e1565b61373d60208301846131e1565b9392505050565b600061374f82613004565b915061375a83613004565b925082820261376881613004565b9150828204841483151761377f5761377e6135cc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137c082613004565b91506137cb83613004565b9250826137db576137da613786565b5b828204905092915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b600061381c601e83612ef5565b9150613827826137e6565b602082019050919050565b6000602082019050818103600083015261384b8161380f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006138ae602883612ef5565b91506138b982613852565b604082019050919050565b600060208201905081810360008301526138dd816138a1565b9050919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613940602283612ef5565b915061394b826138e4565b604082019050919050565b6000602082019050818103600083015261396f81613933565b9050919050565b600061398182613004565b915061398c83613004565b92508282019050808211156139a4576139a36135cc565b5b92915050565b6000819050919050565b60006139cf6139ca6139c584612fa6565b6139aa565b612fa6565b9050919050565b60006139e1826139b4565b9050919050565b60006139f3826139d6565b9050919050565b613a03816139e8565b82525050565b6000602082019050613a1e60008301846139fa565b92915050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b6000613a5a601d83612ef5565b9150613a6582613a24565b602082019050919050565b60006020820190508181036000830152613a8981613a4d565b9050919050565b6000604082019050613aa5600083018561335a565b613ab26020830184613086565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b15602583612ef5565b9150613b2082613ab9565b604082019050919050565b60006020820190508181036000830152613b4481613b08565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613b81601783612ef5565b9150613b8c82613b4b565b602082019050919050565b60006020820190508181036000830152613bb081613b74565b9050919050565b600081519050613bc681612fd8565b92915050565b600060208284031215613be257613be1612f9c565b5b6000613bf084828501613bb7565b91505092915050565b6000604082019050613c0e600083018561335a565b613c1b602083018461335a565b9392505050565b6000819050919050565b6000613c47613c42613c3d84613c22565b6139aa565b613004565b9050919050565b613c5781613c2c565b82525050565b600060c082019050613c72600083018961335a565b613c7f60208301886131e1565b613c8c6040830187613c4e565b613c996060830186613c4e565b613ca6608083018561335a565b613cb360a08301846131e1565b979650505050505050565b600081519050613ccd8161300e565b92915050565b600080600060608486031215613cec57613ceb612f9c565b5b6000613cfa86828701613cbe565b9350506020613d0b86828701613cbe565b9250506040613d1c86828701613cbe565b9150509250925092565b6000604082019050613d3b600083018561335a565b613d4860208301846131e1565b9392505050565b600081519050613d5e81613115565b92915050565b600060208284031215613d7a57613d79612f9c565b5b6000613d8884828501613d4f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ded602683612ef5565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612ef5565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612ef5565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612ef5565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612ef5565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612ef5565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612ef5565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612ef5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612ef5565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f81612fc6565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d60008301886131e1565b61432a6020830187613c4e565b818103604083015261433c81866142aa565b905061434b606083018561335a565b61435860808301846131e1565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612ef5565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282613004565b915061444d83613004565b9250828203905081811115614465576144646135cc565b5b9291505056fea264697066735822122079dc651cef0c9c25ecb45b013da343b8cd5866d9d89526bb50941b925f69cda064736f6c63430008130033