60806040523480156200001157600080fd5b50620000226200002860201b60201c565b620001d3565b600060019054906101000a900460ff16156200007b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000729062000176565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620000ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620000e49190620001b6565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200015e602783620000ef565b91506200016b8262000100565b604082019050919050565b6000602082019050818103600083015262000191816200014f565b9050919050565b600060ff82169050919050565b620001b08162000198565b82525050565b6000602082019050620001cd6000830184620001a5565b92915050565b6155d880620001e36000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80638456cb5911610104578063d547741f116100a2578063e985e9c511610071578063e985e9c514610540578063f242432a14610570578063f5298aca1461058c578063f62d1888146105a8576101d9565b8063d547741f146104cc578063d81d0a15146104e8578063e63ab1e914610504578063e8a3d48514610522576101d9565b8063a22cb465116100de578063a22cb46514610444578063a5097ebf14610460578063bd85b0391461047e578063d5391393146104ae576101d9565b80638456cb59146103ec57806391d14854146103f6578063a217fddf14610426576101d9565b80632f2ff15d1161017c5780634f558e791161014b5780634f558e79146103645780635c975abb146103945780636b20c454146103b25780637f345710146103ce576101d9565b80632f2ff15d146102f257806336568abe1461030e5780633f4ba83a1461032a5780634e1273f414610334576101d9565b80630e89341c116101b85780630e89341c1461025a578063156e29f61461028a578063248a9ca3146102a65780632eb2c2d6146102d6576101d9565b8062fdd58e146101de57806301ffc9a71461020e57806302fe53051461023e575b600080fd5b6101f860048036038101906101f391906136e1565b6105c4565b6040516102059190613730565b60405180910390f35b610228600480360381019061022391906137a3565b61068d565b60405161023591906137eb565b60405180910390f35b6102586004803603810190610253919061394c565b61069f565b005b610274600480360381019061026f9190613995565b6106de565b6040516102819190613a41565b60405180910390f35b6102a4600480360381019061029f9190613a63565b610713565b005b6102c060048036038101906102bb9190613aec565b61075e565b6040516102cd9190613b28565b60405180910390f35b6102f060048036038101906102eb9190613cac565b61077e565b005b61030c60048036038101906103079190613d7b565b61081f565b005b61032860048036038101906103239190613d7b565b610840565b005b6103326108c3565b005b61034e60048036038101906103499190613e7e565b6108f8565b60405161035b9190613fb4565b60405180910390f35b61037e60048036038101906103799190613995565b610a11565b60405161038b91906137eb565b60405180910390f35b61039c610a25565b6040516103a991906137eb565b60405180910390f35b6103cc60048036038101906103c79190613fd6565b610a3c565b005b6103d6610ad9565b6040516103e39190613b28565b60405180910390f35b6103f4610afd565b005b610410600480360381019061040b9190613d7b565b610b32565b60405161041d91906137eb565b60405180910390f35b61042e610b9d565b60405161043b9190613b28565b60405180910390f35b61045e6004803603810190610459919061408d565b610ba4565b005b610468610bba565b6040516104759190613a41565b60405180910390f35b61049860048036038101906104939190613995565b610c05565b6040516104a59190613730565b60405180910390f35b6104b6610c23565b6040516104c39190613b28565b60405180910390f35b6104e660048036038101906104e19190613d7b565b610c47565b005b61050260048036038101906104fd9190613fd6565b610c68565b005b61050c610cb3565b6040516105199190613b28565b60405180910390f35b61052a610cd7565b6040516105379190613a41565b60405180910390f35b61055a600480360381019061055591906140cd565b610d22565b60405161056791906137eb565b60405180910390f35b61058a6004803603810190610585919061410d565b610db6565b005b6105a660048036038101906105a19190613a63565b610e57565b005b6105c260048036038101906105bd919061394c565b610ef4565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062b90614216565b60405180910390fd5b6065600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610698826110ff565b9050919050565b7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c6106c981611179565b8161015f90816106d99190614442565b505050565b606061015f6106ec8361118d565b6040516020016106fd9291906145f9565b6040516020818303038152906040529050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661073d81611179565b6107588484846040518060200160405280600081525061125b565b50505050565b600060976000838152602001908152602001600020600101549050919050565b61078661140c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806107cc57506107cb856107c661140c565b610d22565b5b61080b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108029061469e565b60405180910390fd5b6108188585858585611414565b5050505050565b6108288261075e565b61083181611179565b61083b8383611738565b505050565b61084861140c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ac90614730565b60405180910390fd5b6108bf8282611819565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108ed81611179565b6108f56118fb565b50565b6060815183511461093e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610935906147c2565b60405180910390fd5b6000835167ffffffffffffffff81111561095b5761095a613821565b5b6040519080825280602002602001820160405280156109895781602001602082028036833780820191505090505b50905060005b8451811015610a06576109d68582815181106109ae576109ad6147e2565b5b60200260200101518583815181106109c9576109c86147e2565b5b60200260200101516105c4565b8282815181106109e9576109e86147e2565b5b602002602001018181525050806109ff90614840565b905061098f565b508091505092915050565b600080610a1d83610c05565b119050919050565b600060c960009054906101000a900460ff16905090565b610a4461140c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a8a5750610a8983610a8461140c565b610d22565b5b610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac09061469e565b60405180910390fd5b610ad483838361195e565b505050565b7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c81565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2781611179565b610b2f611c2e565b50565b60006097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b610bb6610baf61140c565b8383611c91565b5050565b606061015f610be03073ffffffffffffffffffffffffffffffffffffffff166014611dfd565b604051602001610bf19291906148ae565b604051602081830303815290604052905090565b600061012d6000838152602001908152602001600020549050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610c508261075e565b610c5981611179565b610c638383611819565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610c9281611179565b610cad84848460405180602001604052806000815250612039565b50505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b606061015f610cfd3073ffffffffffffffffffffffffffffffffffffffff166014611dfd565b604051602001610d0e9291906148ae565b604051602081830303815290604052905090565b6000606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610dbe61140c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e045750610e0385610dfe61140c565b610d22565b5b610e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a9061469e565b60405180910390fd5b610e508585858585612266565b5050505050565b610e5f61140c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ea55750610ea483610e9f61140c565b610d22565b5b610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb9061469e565b60405180910390fd5b610eef838383612504565b505050565b60008060019054906101000a900460ff16159050808015610f255750600160008054906101000a900460ff1660ff16105b80610f525750610f343061274c565b158015610f515750600160008054906101000a900460ff1660ff16145b5b610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8890614953565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610fce576001600060016101000a81548160ff0219169083151502179055505b610fe66040518060200160405280600081525061276f565b610fee6127ca565b610ff661281b565b610ffe612874565b6110066128c5565b6110136000801b33611738565b61103d7f7804d923f43a17d325d77e781528e0793b2edd9890ab45fc64efd7b4b427744c33611738565b6110677f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33611738565b6110917f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633611738565b8161015f90816110a19190614442565b5080156110fb5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516110f291906149bb565b60405180910390a15b5050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611172575061117182612916565b5b9050919050565b61118a8161118561140c565b6129f8565b50565b60606000600161119c84612a7d565b01905060008167ffffffffffffffff8111156111bb576111ba613821565b5b6040519080825280601f01601f1916602001820160405280156111ed5781602001600182028036833780820191505090505b509050600082602001820190505b600115611250578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611244576112436149d6565b5b049450600085036111fb575b819350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190614a77565b60405180910390fd5b60006112d461140c565b905060006112e185612bd0565b905060006112ee85612bd0565b90506112ff83600089858589612c4a565b846065600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461135f9190614a97565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516113dd929190614acb565b60405180910390a46113f483600089858589612c68565b61140383600089898989612c70565b50505050505050565b600033905090565b8151835114611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144f90614b66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be90614bf8565b60405180910390fd5b60006114d161140c565b90506114e1818787878787612c4a565b60005b8451811015611695576000858281518110611502576115016147e2565b5b602002602001015190506000858381518110611521576115206147e2565b5b6020026020010151905060006065600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba90614c8a565b60405180910390fd5b8181036065600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816065600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461167a9190614a97565b925050819055505050508061168e90614840565b90506114e4565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161170c929190614caa565b60405180910390a4611722818787878787612c68565b611730818787878787612e47565b505050505050565b6117428282610b32565b6118155760016097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506117ba61140c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6118238282610b32565b156118f75760006097600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061189c61140c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b61190361301e565b600060c960006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61194761140c565b6040516119549190614cf0565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c490614d7d565b60405180910390fd5b8051825114611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614b66565b60405180910390fd5b6000611a1b61140c565b9050611a3b81856000868660405180602001604052806000815250612c4a565b60005b8351811015611b8a576000848281518110611a5c57611a5b6147e2565b5b602002602001015190506000848381518110611a7b57611a7a6147e2565b5b6020026020010151905060006065600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614e0f565b60405180910390fd5b8181036065600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611b8290614840565b915050611a3e565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611c02929190614caa565b60405180910390a4611c2881856000868660405180602001604052806000815250612c68565b50505050565b611c36613067565b600160c960006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c7a61140c565b604051611c879190614cf0565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690614ea1565b60405180910390fd5b80606660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611df091906137eb565b60405180910390a3505050565b606060006002836002611e109190614ec1565b611e1a9190614a97565b67ffffffffffffffff811115611e3357611e32613821565b5b6040519080825280601f01601f191660200182016040528015611e655781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611e9d57611e9c6147e2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611f0157611f006147e2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611f419190614ec1565b611f4b9190614a97565b90505b6001811115611feb577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611f8d57611f8c6147e2565b5b1a60f81b828281518110611fa457611fa36147e2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611fe490614f03565b9050611f4e565b506000841461202f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202690614f78565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036120a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f90614a77565b60405180910390fd5b81518351146120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e390614b66565b60405180910390fd5b60006120f661140c565b905061210781600087878787612c4a565b60005b84518110156121c157838181518110612126576121256147e2565b5b602002602001015160656000878481518110612145576121446147e2565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121a79190614a97565b9250508190555080806121b990614840565b91505061210a565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612239929190614caa565b60405180910390a461225081600087878787612c68565b61225f81600087878787612e47565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc90614bf8565b60405180910390fd5b60006122df61140c565b905060006122ec85612bd0565b905060006122f985612bd0565b9050612309838989858589612c4a565b60006065600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239890614c8a565b60405180910390fd5b8581036065600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856065600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124589190614a97565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516124d5929190614acb565b60405180910390a46124eb848a8a86868a612c68565b6124f9848a8a8a8a8a612c70565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256a90614d7d565b60405180910390fd5b600061257d61140c565b9050600061258a84612bd0565b9050600061259784612bd0565b90506125b783876000858560405180602001604052806000815250612c4a565b60006065600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690614e0f565b60405180910390fd5b8481036065600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161271d929190614acb565b60405180910390a461274384886000868660405180602001604052806000815250612c68565b50505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff166127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b59061500a565b60405180910390fd5b6127c7816130b1565b50565b600060019054906101000a900460ff16612819576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128109061500a565b60405180910390fd5b565b600060019054906101000a900460ff1661286a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128619061500a565b60405180910390fd5b61287261310c565b565b600060019054906101000a900460ff166128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba9061500a565b60405180910390fd5b565b600060019054906101000a900460ff16612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b9061500a565b60405180910390fd5b565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806129e157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806129f157506129f082613178565b5b9050919050565b612a028282610b32565b612a7957612a0f816131e2565b612a1d8360001c602061320f565b604051602001612a2e9291906150c2565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a709190613a41565b60405180910390fd5b5050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612adb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612ad157612ad06149d6565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612b18576d04ee2d6d415b85acef81000000008381612b0e57612b0d6149d6565b5b0492506020810190505b662386f26fc100008310612b4757662386f26fc100008381612b3d57612b3c6149d6565b5b0492506010810190505b6305f5e1008310612b70576305f5e1008381612b6657612b656149d6565b5b0492506008810190505b6127108310612b95576127108381612b8b57612b8a6149d6565b5b0492506004810190505b60648310612bb85760648381612bae57612bad6149d6565b5b0492506002810190505b600a8310612bc7576001810190505b80915050919050565b60606000600167ffffffffffffffff811115612bef57612bee613821565b5b604051908082528060200260200182016040528015612c1d5781602001602082028036833780820191505090505b5090508281600081518110612c3557612c346147e2565b5b60200260200101818152505080915050919050565b612c52613067565b612c6086868686868661344b565b505050505050565b505050505050565b612c8f8473ffffffffffffffffffffffffffffffffffffffff1661274c565b15612e3f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612cd5959493929190615151565b6020604051808303816000875af1925050508015612d1157506040513d601f19601f82011682018060405250810190612d0e91906151c0565b60015b612db657612d1d6151fa565b806308c379a003612d795750612d3161521c565b80612d3c5750612d7b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d709190613a41565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dad9061531e565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e34906153b0565b60405180910390fd5b505b505050505050565b612e668473ffffffffffffffffffffffffffffffffffffffff1661274c565b15613016578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612eac9594939291906153d0565b6020604051808303816000875af1925050508015612ee857506040513d601f19601f82011682018060405250810190612ee591906151c0565b60015b612f8d57612ef46151fa565b806308c379a003612f505750612f0861521c565b80612f135750612f52565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f479190613a41565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f849061531e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300b906153b0565b60405180910390fd5b505b505050505050565b613026610a25565b613065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305c90615484565b60405180910390fd5b565b61306f610a25565b156130af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a6906154f0565b60405180910390fd5b565b600060019054906101000a900460ff16613100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f79061500a565b60405180910390fd5b6131098161361e565b50565b600060019054906101000a900460ff1661315b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131529061500a565b60405180910390fd5b600060c960006101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60606132088273ffffffffffffffffffffffffffffffffffffffff16601460ff1661320f565b9050919050565b6060600060028360026132229190614ec1565b61322c9190614a97565b67ffffffffffffffff81111561324557613244613821565b5b6040519080825280601f01601f1916602001820160405280156132775781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106132af576132ae6147e2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613313576133126147e2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026133539190614ec1565b61335d9190614a97565b90505b60018111156133fd577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061339f5761339e6147e2565b5b1a60f81b8282815181106133b6576133b56147e2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806133f690614f03565b9050613360565b5060008414613441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343890614f78565b60405180910390fd5b8091505092915050565b613459868686868686613631565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361350b5760005b8351811015613509578281815181106134ac576134ab6147e2565b5b602002602001015161012d60008684815181106134cc576134cb6147e2565b5b6020026020010151815260200190815260200160002060008282546134f19190614a97565b925050819055508061350290614840565b9050613490565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036136165760005b83518110156136145760008482815181106135605761355f6147e2565b5b60200260200101519050600084838151811061357f5761357e6147e2565b5b60200260200101519050600061012d6000848152602001908152602001600020549050818110156135e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dc90615582565b60405180910390fd5b81810361012d6000858152602001908152602001600020819055505050508061360d90614840565b9050613542565b505b505050505050565b806067908161362d9190614442565b5050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136788261364d565b9050919050565b6136888161366d565b811461369357600080fd5b50565b6000813590506136a58161367f565b92915050565b6000819050919050565b6136be816136ab565b81146136c957600080fd5b50565b6000813590506136db816136b5565b92915050565b600080604083850312156136f8576136f7613643565b5b600061370685828601613696565b9250506020613717858286016136cc565b9150509250929050565b61372a816136ab565b82525050565b60006020820190506137456000830184613721565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6137808161374b565b811461378b57600080fd5b50565b60008135905061379d81613777565b92915050565b6000602082840312156137b9576137b8613643565b5b60006137c78482850161378e565b91505092915050565b60008115159050919050565b6137e5816137d0565b82525050565b600060208201905061380060008301846137dc565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61385982613810565b810181811067ffffffffffffffff8211171561387857613877613821565b5b80604052505050565b600061388b613639565b90506138978282613850565b919050565b600067ffffffffffffffff8211156138b7576138b6613821565b5b6138c082613810565b9050602081019050919050565b82818337600083830152505050565b60006138ef6138ea8461389c565b613881565b90508281526020810184848401111561390b5761390a61380b565b5b6139168482856138cd565b509392505050565b600082601f83011261393357613932613806565b5b81356139438482602086016138dc565b91505092915050565b60006020828403121561396257613961613643565b5b600082013567ffffffffffffffff8111156139805761397f613648565b5b61398c8482850161391e565b91505092915050565b6000602082840312156139ab576139aa613643565b5b60006139b9848285016136cc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139fc5780820151818401526020810190506139e1565b60008484015250505050565b6000613a13826139c2565b613a1d81856139cd565b9350613a2d8185602086016139de565b613a3681613810565b840191505092915050565b60006020820190508181036000830152613a5b8184613a08565b905092915050565b600080600060608486031215613a7c57613a7b613643565b5b6000613a8a86828701613696565b9350506020613a9b868287016136cc565b9250506040613aac868287016136cc565b9150509250925092565b6000819050919050565b613ac981613ab6565b8114613ad457600080fd5b50565b600081359050613ae681613ac0565b92915050565b600060208284031215613b0257613b01613643565b5b6000613b1084828501613ad7565b91505092915050565b613b2281613ab6565b82525050565b6000602082019050613b3d6000830184613b19565b92915050565b600067ffffffffffffffff821115613b5e57613b5d613821565b5b602082029050602081019050919050565b600080fd5b6000613b87613b8284613b43565b613881565b90508083825260208201905060208402830185811115613baa57613ba9613b6f565b5b835b81811015613bd35780613bbf88826136cc565b845260208401935050602081019050613bac565b5050509392505050565b600082601f830112613bf257613bf1613806565b5b8135613c02848260208601613b74565b91505092915050565b600067ffffffffffffffff821115613c2657613c25613821565b5b613c2f82613810565b9050602081019050919050565b6000613c4f613c4a84613c0b565b613881565b905082815260208101848484011115613c6b57613c6a61380b565b5b613c768482856138cd565b509392505050565b600082601f830112613c9357613c92613806565b5b8135613ca3848260208601613c3c565b91505092915050565b600080600080600060a08688031215613cc857613cc7613643565b5b6000613cd688828901613696565b9550506020613ce788828901613696565b945050604086013567ffffffffffffffff811115613d0857613d07613648565b5b613d1488828901613bdd565b935050606086013567ffffffffffffffff811115613d3557613d34613648565b5b613d4188828901613bdd565b925050608086013567ffffffffffffffff811115613d6257613d61613648565b5b613d6e88828901613c7e565b9150509295509295909350565b60008060408385031215613d9257613d91613643565b5b6000613da085828601613ad7565b9250506020613db185828601613696565b9150509250929050565b600067ffffffffffffffff821115613dd657613dd5613821565b5b602082029050602081019050919050565b6000613dfa613df584613dbb565b613881565b90508083825260208201905060208402830185811115613e1d57613e1c613b6f565b5b835b81811015613e465780613e328882613696565b845260208401935050602081019050613e1f565b5050509392505050565b600082601f830112613e6557613e64613806565b5b8135613e75848260208601613de7565b91505092915050565b60008060408385031215613e9557613e94613643565b5b600083013567ffffffffffffffff811115613eb357613eb2613648565b5b613ebf85828601613e50565b925050602083013567ffffffffffffffff811115613ee057613edf613648565b5b613eec85828601613bdd565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f2b816136ab565b82525050565b6000613f3d8383613f22565b60208301905092915050565b6000602082019050919050565b6000613f6182613ef6565b613f6b8185613f01565b9350613f7683613f12565b8060005b83811015613fa7578151613f8e8882613f31565b9750613f9983613f49565b925050600181019050613f7a565b5085935050505092915050565b60006020820190508181036000830152613fce8184613f56565b905092915050565b600080600060608486031215613fef57613fee613643565b5b6000613ffd86828701613696565b935050602084013567ffffffffffffffff81111561401e5761401d613648565b5b61402a86828701613bdd565b925050604084013567ffffffffffffffff81111561404b5761404a613648565b5b61405786828701613bdd565b9150509250925092565b61406a816137d0565b811461407557600080fd5b50565b60008135905061408781614061565b92915050565b600080604083850312156140a4576140a3613643565b5b60006140b285828601613696565b92505060206140c385828601614078565b9150509250929050565b600080604083850312156140e4576140e3613643565b5b60006140f285828601613696565b925050602061410385828601613696565b9150509250929050565b600080600080600060a0868803121561412957614128613643565b5b600061413788828901613696565b955050602061414888828901613696565b9450506040614159888289016136cc565b935050606061416a888289016136cc565b925050608086013567ffffffffffffffff81111561418b5761418a613648565b5b61419788828901613c7e565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000614200602a836139cd565b915061420b826141a4565b604082019050919050565b6000602082019050818103600083015261422f816141f3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061427d57607f821691505b6020821081036142905761428f614236565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026142f87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826142bb565b61430286836142bb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061433f61433a614335846136ab565b61431a565b6136ab565b9050919050565b6000819050919050565b61435983614324565b61436d61436582614346565b8484546142c8565b825550505050565b600090565b614382614375565b61438d818484614350565b505050565b5b818110156143b1576143a660008261437a565b600181019050614393565b5050565b601f8211156143f6576143c781614296565b6143d0846142ab565b810160208510156143df578190505b6143f36143eb856142ab565b830182614392565b50505b505050565b600082821c905092915050565b6000614419600019846008026143fb565b1980831691505092915050565b60006144328383614408565b9150826002028217905092915050565b61444b826139c2565b67ffffffffffffffff81111561446457614463613821565b5b61446e8254614265565b6144798282856143b5565b600060209050601f8311600181146144ac576000841561449a578287015190505b6144a48582614426565b86555061450c565b601f1984166144ba86614296565b60005b828110156144e2578489015182556001820191506020850194506020810190506144bd565b868310156144ff57848901516144fb601f891682614408565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b6000815461452c81614265565b6145368186614514565b94506001821660008114614551576001811461456657614599565b60ff1983168652811515820286019350614599565b61456f85614296565b60005b8381101561459157815481890152600182019150602081019050614572565b838801955050505b50505092915050565b7f2f00000000000000000000000000000000000000000000000000000000000000815250565b60006145d3826139c2565b6145dd8185614514565b93506145ed8185602086016139de565b80840191505092915050565b6000614605828561451f565b9150614610826145a2565b60018201915061462082846145c8565b91508190509392505050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000614688602e836139cd565b91506146938261462c565b604082019050919050565b600060208201905081810360008301526146b78161467b565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061471a602f836139cd565b9150614725826146be565b604082019050919050565b600060208201905081810360008301526147498161470d565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006147ac6029836139cd565b91506147b782614750565b604082019050919050565b600060208201905081810360008301526147db8161479f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061484b826136ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361487d5761487c614811565b5b600182019050919050565b7f2f636f6c6c656374696f6e2f0000000000000000000000000000000000000000815250565b60006148ba828561451f565b91506148c582614888565b600c820191506148d582846145c8565b91508190509392505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061493d602e836139cd565b9150614948826148e1565b604082019050919050565b6000602082019050818103600083015261496c81614930565b9050919050565b6000819050919050565b600060ff82169050919050565b60006149a56149a061499b84614973565b61431a565b61497d565b9050919050565b6149b58161498a565b82525050565b60006020820190506149d060008301846149ac565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a616021836139cd565b9150614a6c82614a05565b604082019050919050565b60006020820190508181036000830152614a9081614a54565b9050919050565b6000614aa2826136ab565b9150614aad836136ab565b9250828201905080821115614ac557614ac4614811565b5b92915050565b6000604082019050614ae06000830185613721565b614aed6020830184613721565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614b506028836139cd565b9150614b5b82614af4565b604082019050919050565b60006020820190508181036000830152614b7f81614b43565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614be26025836139cd565b9150614bed82614b86565b604082019050919050565b60006020820190508181036000830152614c1181614bd5565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614c74602a836139cd565b9150614c7f82614c18565b604082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b60006040820190508181036000830152614cc48185613f56565b90508181036020830152614cd88184613f56565b90509392505050565b614cea8161366d565b82525050565b6000602082019050614d056000830184614ce1565b92915050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d676023836139cd565b9150614d7282614d0b565b604082019050919050565b60006020820190508181036000830152614d9681614d5a565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614df96024836139cd565b9150614e0482614d9d565b604082019050919050565b60006020820190508181036000830152614e2881614dec565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614e8b6029836139cd565b9150614e9682614e2f565b604082019050919050565b60006020820190508181036000830152614eba81614e7e565b9050919050565b6000614ecc826136ab565b9150614ed7836136ab565b9250828202614ee5816136ab565b91508282048414831517614efc57614efb614811565b5b5092915050565b6000614f0e826136ab565b915060008203614f2157614f20614811565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614f626020836139cd565b9150614f6d82614f2c565b602082019050919050565b60006020820190508181036000830152614f9181614f55565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000614ff4602b836139cd565b9150614fff82614f98565b604082019050919050565b6000602082019050818103600083015261502381614fe7565b9050919050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000615060601783614514565b915061506b8261502a565b601782019050919050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006150ac601183614514565b91506150b782615076565b601182019050919050565b60006150cd82615053565b91506150d982856145c8565b91506150e48261509f565b91506150f082846145c8565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000615123826150fc565b61512d8185615107565b935061513d8185602086016139de565b61514681613810565b840191505092915050565b600060a0820190506151666000830188614ce1565b6151736020830187614ce1565b6151806040830186613721565b61518d6060830185613721565b818103608083015261519f8184615118565b90509695505050505050565b6000815190506151ba81613777565b92915050565b6000602082840312156151d6576151d5613643565b5b60006151e4848285016151ab565b91505092915050565b60008160e01c9050919050565b600060033d11156152195760046000803e6152166000516151ed565b90505b90565b600060443d106152a95761522e613639565b60043d036004823e80513d602482011167ffffffffffffffff821117156152565750506152a9565b808201805167ffffffffffffffff81111561527457505050506152a9565b80602083010160043d0385018111156152915750505050506152a9565b6152a082602001850186613850565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006153086034836139cd565b9150615313826152ac565b604082019050919050565b60006020820190508181036000830152615337816152fb565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061539a6028836139cd565b91506153a58261533e565b604082019050919050565b600060208201905081810360008301526153c98161538d565b9050919050565b600060a0820190506153e56000830188614ce1565b6153f26020830187614ce1565b81810360408301526154048186613f56565b905081810360608301526154188185613f56565b9050818103608083015261542c8184615118565b90509695505050505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061546e6014836139cd565b915061547982615438565b602082019050919050565b6000602082019050818103600083015261549d81615461565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006154da6010836139cd565b91506154e5826154a4565b602082019050919050565b60006020820190508181036000830152615509816154cd565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b600061556c6028836139cd565b915061557782615510565b604082019050919050565b6000602082019050818103600083015261559b8161555f565b905091905056fea264697066735822122060a230c356a4268ef0bb46b7e18ed8e62219388d6104a5914eb6eb0f37b571f764736f6c63430008120033