selectricity
15 years agoMerge jdong
John Dong [Tue, 28 Aug 2007 20:12:32 +0000 (16:12 -0400)]
Merge jdong

15 years agoRename Selectricity API calls to more explicitly call itself quickvotes.
John Dong [Tue, 28 Aug 2007 20:11:45 +0000 (16:11 -0400)]
Rename Selectricity API calls to more explicitly call itself quickvotes.

15 years agoMerge from jdong; new webstats
John Dong [Tue, 28 Aug 2007 17:31:13 +0000 (13:31 -0400)]
Merge from jdong; new webstats

15 years agoInstall sitealizer stats
John Dong [Tue, 28 Aug 2007 17:29:22 +0000 (13:29 -0400)]
Install sitealizer stats

15 years agoMoved files around a bit more.
<mako@atdot.cc> [Tue, 28 Aug 2007 17:04:59 +0000 (13:04 -0400)]
Moved files around a bit more.

15 years agoMerge from jdong
John Dong [Tue, 28 Aug 2007 16:27:38 +0000 (12:27 -0400)]
Merge from jdong

15 years agoClean up a deprecation warning and another warning.
John Dong [Tue, 28 Aug 2007 16:26:21 +0000 (12:26 -0400)]
Clean up a deprecation warning and another warning.

15 years agoMerge head
John Dong [Tue, 28 Aug 2007 15:44:47 +0000 (11:44 -0400)]
Merge head

15 years agoChanged minor CSS issue.
<mako@atdot.cc> [Tue, 28 Aug 2007 15:20:06 +0000 (11:20 -0400)]
Changed minor CSS issue.

15 years agoFirst major stab at the integration of Courtland's CSS into
<mako@atdot.cc> [Tue, 28 Aug 2007 15:12:59 +0000 (11:12 -0400)]
First major stab at the integration of Courtland's CSS into
Selectricity. It looks good!

So far, I've only really finished the front page.

15 years agoCreated a user "summary/profile page". Also corected several minor typos on election...
<jlsharps@mit.edu> [Mon, 27 Aug 2007 23:02:32 +0000 (19:02 -0400)]
Created a user "summary/profile page". Also corected several minor typos on election results pages. Modified the sign-up page to be more informative.

15 years agoAllowed for the results page of quickvotes to be hidden while the quickvote is go
<jlsharps@mit.edu> [Sat, 25 Aug 2007 00:59:18 +0000 (20:59 -0400)]
Allowed for the results page of quickvotes to be hidden while the quickvote is go
ing on. Also added a 'notices' option to QuickVotes available only to logged in u
sers. Those two options were added to the elections table, so they should be easy
 to extend to full elections. Also redid some logic on the layout and index.

15 years ago* refactored the system so that it keeps pictures in a seperate table
<mako@atdot.cc> [Fri, 24 Aug 2007 23:36:06 +0000 (19:36 -0400)]
* refactored the system so that it keeps pictures in a seperate table
  but works almost almost identically

* added a new progress bar

* fixed a few minor bugs and walked through creating a full-fledged
  election

15 years agoremoved breakpointer
<mako@atdot.cc> [Fri, 24 Aug 2007 19:01:53 +0000 (15:01 -0400)]
removed breakpointer

15 years agoAdded Plugin for dynamically adjusting session options (so they will never
<jlsharps@mit.edu> [Fri, 24 Aug 2007 18:59:36 +0000 (14:59 -0400)]
Added Plugin for dynamically adjusting session options (so they will never
expire). The code for that, along with a change of the session_key, which
changes how the cookies hash stores teh session_id, are both in the environment
file.

15 years agoAdded a method, views, and corresponding route so that a user can track the
<jlsharps@mit.edu> [Thu, 23 Aug 2007 22:27:55 +0000 (18:27 -0400)]
Added a method, views, and corresponding route so that a user can track the
quickvotes he has created by his session_id. Have yet to modify the cookies to
stick around permanently.

15 years agoFinished writing the selectricityservice_test unit tests which end up
<mako@atdot.cc> [Thu, 23 Aug 2007 20:10:12 +0000 (16:10 -0400)]
Finished writing the selectricityservice_test unit tests which end up
testing much of the application.

15 years agoBig commit includes:
<mako@atdot.cc> [Thu, 23 Aug 2007 19:45:11 +0000 (15:45 -0400)]
Big commit includes:

 * A bunch of cleanup of the unit tests.
 * Addition of fixtures for elections and candidates.
 * Cleanup of the selectricitservice model.
 * Additional tweaks for testing including addition of ruby-debug for
   testing.

15 years agoAllow custimizable graph sizes, to fit with newly modular results page. Also,
<jlsharps@mit.edu> [Thu, 23 Aug 2007 19:20:00 +0000 (15:20 -0400)]
Allow custimizable graph sizes, to fit with newly modular results page. Also,
beginning a method that will allow users to track the QuickVotes they create.

15 years agoStarted Creation of "advanced" quickvote tab. Also started to create a quickvote...
<jlsharps@mit.edu> [Wed, 22 Aug 2007 22:27:50 +0000 (18:27 -0400)]
Started Creation of "advanced" quickvote tab. Also started to create a quickvote model testing class, but it has no tests yet.

15 years agoMerge from head -- breakage
John Dong [Wed, 22 Aug 2007 04:08:24 +0000 (00:08 -0400)]
Merge from head -- breakage

15 years agoMerge from jdong
John Dong [Wed, 22 Aug 2007 02:33:12 +0000 (22:33 -0400)]
Merge from jdong

15 years agoMade the results page 'modular,' and all the necessary adaptations.
<jlsharps@mit.edu> [Tue, 21 Aug 2007 22:36:06 +0000 (18:36 -0400)]
Made the results page 'modular,' and all the necessary adaptations.

15 years agoRevise functional test of graph controller for retrieving an unknown id number. Curre...
John Dong [Tue, 21 Aug 2007 19:12:02 +0000 (15:12 -0400)]
Revise functional test of graph controller for retrieving an unknown id number. Currently I think raising RecordNotFound is fine. The alternate would be to generate a record not found PNG, but I don't see the point of doing that either.

15 years agoAdded functional tests for the graph controller -- assert that valid images return...
John Dong [Tue, 21 Aug 2007 19:08:31 +0000 (15:08 -0400)]
Added functional tests for the graph controller -- assert that valid images return png files. All tests pass well too.

15 years agoPut in a pie graph for Plurality votes. ALso slimmed down victories_and_ties method...
<jlsharps@mit.edu> [Tue, 21 Aug 2007 17:56:23 +0000 (13:56 -0400)]
Put in a pie graph for Plurality votes. ALso slimmed down victories_and_ties method in rubyvote/condorcet.rb considerably.

15 years agoAdd a fix for a NoMethodError when WHOIS/DNS server(s) time out.
John Dong [Tue, 21 Aug 2007 17:49:04 +0000 (13:49 -0400)]
Add a fix for a NoMethodError when WHOIS/DNS server(s) time out.

15 years agoFinished organzing preferential vote tables into one partial. Also changed RubyVote...
<jlsharps@mit.edu> [Tue, 21 Aug 2007 16:57:40 +0000 (12:57 -0400)]
Finished organzing preferential vote tables into one partial. Also changed RubyVote's victories_and_ties method to return a hash of hashes which stores both victories and ties.

15 years agoMerged from jdong; lots of escaping fixes
John Dong [Mon, 20 Aug 2007 21:32:57 +0000 (17:32 -0400)]
Merged from jdong; lots of escaping fixes

15 years agoMerge from head
John Dong [Mon, 20 Aug 2007 21:32:37 +0000 (17:32 -0400)]
Merge from head

15 years agoClose tables
John Dong [Mon, 20 Aug 2007 21:29:51 +0000 (17:29 -0400)]
Close tables

15 years agoAdd a bunch of fixes to HTML escaping, and a test case for it
John Dong [Mon, 20 Aug 2007 21:25:50 +0000 (17:25 -0400)]
Add a bunch of fixes to HTML escaping, and a test case for it

15 years agoAdded logic to pref_table.rhtml to prevent it from throwing an error on an empty...
<jlsharps@mit.edu> [Mon, 20 Aug 2007 21:02:14 +0000 (17:02 -0400)]
Added logic to pref_table.rhtml to prevent it from throwing an error on an empty results page.

15 years agoStreamlined some graphign contorller methods and took out the 'voters_per_day' method...
<jlsharps@mit.edu> [Mon, 20 Aug 2007 20:46:41 +0000 (16:46 -0400)]
Streamlined some graphign contorller methods and took out the 'voters_per_day' method in the results page. Merge from mako.

15 years agoMerge jdong; mostly functional testing work
John Dong [Mon, 20 Aug 2007 20:10:48 +0000 (16:10 -0400)]
Merge jdong; mostly functional testing work

15 years agoFix error when getting a quickvote result of nonexistent ident
John Dong [Mon, 20 Aug 2007 20:05:46 +0000 (16:05 -0400)]
Fix error when getting a quickvote result of nonexistent ident

15 years agoAdd test case for attempting to cast another vote with same sessid
John Dong [Mon, 20 Aug 2007 20:02:42 +0000 (16:02 -0400)]
Add test case for attempting to cast another vote with same sessid

15 years ago* Fix the session_id accessor. Previous version looks for wrong method
John Dong [Mon, 20 Aug 2007 19:56:39 +0000 (15:56 -0400)]
* Fix the session_id accessor. Previous version looks for wrong method
* Added new testcases
  - Creating same-name quickvote
  - Test retrieving results of quickvotes with 0, 1, and 5 votes
  - Test casting a quickvote

15 years agoAdd some empty request testcases.
John Dong [Mon, 20 Aug 2007 19:05:04 +0000 (15:05 -0400)]
Add some empty request testcases.

BREAKAGE: Justin, your new graphs break the results page on empty stuff again (see rake output). Fix.

15 years agoRemove deprecated start_form_tag and end_form_tags. Now you're supposed to do form_ta...
John Dong [Mon, 20 Aug 2007 18:58:30 +0000 (14:58 -0400)]
Remove deprecated start_form_tag and end_form_tags. Now you're supposed to do form_tag() do / end blocks.

15 years agoAdd a few more testcases
John Dong [Mon, 20 Aug 2007 18:43:15 +0000 (14:43 -0400)]
Add a few more testcases

15 years agoOh oops, left in some test cruft in quickvote_controller
John Dong [Mon, 20 Aug 2007 18:36:59 +0000 (14:36 -0400)]
Oh oops, left in some test cruft in quickvote_controller

15 years agoBlarg, finally got functional testing framework working. Had to override the TestSess...
John Dong [Mon, 20 Aug 2007 18:32:52 +0000 (14:32 -0400)]
Blarg, finally got functional testing framework working. Had to override the TestSession class

15 years agoMerged from Mako.
<jlsharps@mit.edu> [Mon, 20 Aug 2007 17:38:35 +0000 (13:38 -0400)]
Merged from Mako.

15 years agoMerge mako
John Dong [Mon, 20 Aug 2007 16:03:05 +0000 (12:03 -0400)]
Merge mako

15 years agoCleaned up some of the test cases.
<mako@atdot.cc> [Mon, 20 Aug 2007 15:51:47 +0000 (11:51 -0400)]
Cleaned up some of the test cases.

15 years agoimported new version of ruby vote
<mako@atdot.cc> [Sat, 18 Aug 2007 00:08:06 +0000 (20:08 -0400)]
imported new version of ruby vote

15 years agoCheck in a bit of partial work on controller testcases, but I'm calling it a day...
John Dong [Fri, 17 Aug 2007 23:53:12 +0000 (19:53 -0400)]
Check in a bit of partial work on controller testcases, but I'm calling it  a day...

15 years agoMerge from jdong
John Dong [Fri, 17 Aug 2007 23:45:32 +0000 (19:45 -0400)]
Merge from jdong

15 years agoFix more DeprecationWarnings
John Dong [Fri, 17 Aug 2007 23:44:48 +0000 (19:44 -0400)]
Fix more DeprecationWarnings

15 years agoMerge head
John Dong [Fri, 17 Aug 2007 23:35:41 +0000 (19:35 -0400)]
Merge head

15 years agoMerge from jdong, XMLRPC changes and testcases
John Dong [Fri, 17 Aug 2007 23:34:05 +0000 (19:34 -0400)]
Merge from jdong, XMLRPC changes and testcases

15 years agoAdd several testcases for casting quickvotes with invalid information
John Dong [Fri, 17 Aug 2007 23:33:00 +0000 (19:33 -0400)]
Add several testcases for casting quickvotes with invalid information

15 years ago* Add a few testcases for checking for nonexistent things
John Dong [Fri, 17 Aug 2007 23:18:05 +0000 (19:18 -0400)]
* Add a few testcases for checking for nonexistent things
* Change helpers to be a bit more streamlined in the way they handle assertions failures vs unexpected exceptions.

15 years agoImprove consistency of XMLRPC error reporting. Now, all error conditions will raise...
John Dong [Fri, 17 Aug 2007 23:16:34 +0000 (19:16 -0400)]
Improve consistency of XMLRPC error reporting. Now, all error conditions will raise an exception. Before, there was an inconsistent mix between raising exceptions and returning nil objects. Nil objects are much less desirable because the client must explicitly check for errors and some errors might silently pass through and produce incorrect results

15 years agoAdd assert_cast_quickvote_succeeds/fails helper, and changed the fails helpers to...
John Dong [Fri, 17 Aug 2007 22:46:01 +0000 (18:46 -0400)]
Add assert_cast_quickvote_succeeds/fails helper, and changed the fails helpers to instead check that the _succeeds  helper doesn't really succeed.

15 years agoAlso expose voter's Session ID
John Dong [Fri, 17 Aug 2007 22:25:53 +0000 (18:25 -0400)]
Also expose voter's Session ID

15 years agoAdded Sparklines controller and dependency, see README. Created method and table...
<jlsharps@mit.edu> [Fri, 17 Aug 2007 22:07:59 +0000 (18:07 -0400)]
Added Sparklines controller and dependency, see README. Created method and table for margins of victory (i.e won by how much) and ties, in rubyvote, has already been svn'd.

15 years agoMerge from jdong; all testcases should succeed at this point, and all deprecations...
John Dong [Fri, 17 Aug 2007 22:00:31 +0000 (18:00 -0400)]
Merge from jdong; all testcases should succeed at this point, and all deprecations should be gone

15 years agoFix validation of candidate names
John Dong [Fri, 17 Aug 2007 21:57:17 +0000 (17:57 -0400)]
Fix validation of candidate names

15 years agoFixed all triggerable DeprecationWarnings. BE ON LOOKOUT FOR REGRESSIONS.
John Dong [Fri, 17 Aug 2007 21:31:45 +0000 (17:31 -0400)]
Fixed all triggerable DeprecationWarnings. BE ON LOOKOUT FOR REGRESSIONS.

15 years agoAdd testcase for checking validity of vote results
John Dong [Fri, 17 Aug 2007 21:13:18 +0000 (17:13 -0400)]
Add testcase for checking validity of vote results

15 years agoMerged changes from jdong's branch into HEAD.
<mako@atdot.cc> [Fri, 17 Aug 2007 20:49:15 +0000 (16:49 -0400)]
Merged changes from jdong's branch into HEAD.

15 years ago* Refactor checking proper quickvote creation to helper assert_create_quickvote_succeeds
John Dong [Fri, 17 Aug 2007 20:25:31 +0000 (16:25 -0400)]
* Refactor checking proper quickvote creation to helper assert_create_quickvote_succeeds
* Remove a crufty assertion from XML checker -- it is redundant
* Add testcase for a description with binary characters

15 years ago* Add one more assertion in testcase for dupe candidates
John Dong [Fri, 17 Aug 2007 20:15:45 +0000 (16:15 -0400)]
* Add one more assertion in testcase for dupe candidates
* Remove test_create_quickvote_description_htmlescape. As I thought earlier, I actually want the DB to properly store HTML elements. It's the job of the view to make sure it doesn't clobber itself displaying the element.
  - Change the test instead to a test for proper XML escaping. An appended </string> element should be stored properly and not trip hell

15 years agoCorrect a bunch of the testcases. Poor copy-and-paste led to description => nil where...
John Dong [Fri, 17 Aug 2007 20:10:25 +0000 (16:10 -0400)]
Correct a bunch of the testcases. Poor copy-and-paste led to description => nil where it shouldn't have been. Now a bunch more testcases FAIL. Yay me.

15 years ago* Refactor testcase code -- create_quickvote_fails assertion -- was using same block...
John Dong [Fri, 17 Aug 2007 20:02:31 +0000 (16:02 -0400)]
* Refactor testcase code -- create_quickvote_fails assertion -- was using same block of code repetivitely

Add more testcases for improper data
  * Passing in a nil ElectionStruct to quickvotes
  * Passing in only nil {name, description, candidates}
  * Passing in whitespace for name, description, candidates
  * Passing in duplicate candidates
  * Passing in dirty HTML in description field
    - IMO this may not be a "bug" -- we should rather assert that the view will not be injected with HTML. It may be desirable (a feature) to store HTML-ish text in the database.

15 years ago* Validate that quickvote.name is not nil
John Dong [Fri, 17 Aug 2007 20:02:13 +0000 (16:02 -0400)]
* Validate that quickvote.name is not nil

15 years agoCaught error from testcase! Quickvote creation errors weren't being properly returned.
John Dong [Fri, 17 Aug 2007 18:17:19 +0000 (14:17 -0400)]
Caught error from testcase! Quickvote creation errors weren't being properly returned.

15 years agoAdded more testcases:
John Dong [Fri, 17 Aug 2007 18:16:36 +0000 (14:16 -0400)]
Added more testcases:
 * Cast large # of votes
 * Create large # of quickvotes
 * Test creation of quickvote with a bad name

15 years agoAdd some testcases:
John Dong [Fri, 17 Aug 2007 18:04:04 +0000 (14:04 -0400)]
Add some testcases:
  * Create a new quickvote
  * Retrieve a quickvote
  * Casting a quickvote

15 years agoAdd a way to get the votes list from a quickvote votes XMLRPC call
John Dong [Fri, 17 Aug 2007 18:03:19 +0000 (14:03 -0400)]
Add a way to get the votes list from a quickvote votes XMLRPC call

15 years agoStarted implementing XMLRPC test cases
John Dong [Fri, 17 Aug 2007 17:16:53 +0000 (13:16 -0400)]
Started implementing XMLRPC test cases

15 years agoRemoved crufty testcases that fail. Will rewrite them
John Dong [Fri, 17 Aug 2007 16:52:40 +0000 (12:52 -0400)]
Removed crufty testcases that fail. Will rewrite them

15 years agoFix a host of testcase failure issues. Still not done, but this is the end of syntact...
John Dong [Fri, 17 Aug 2007 16:38:19 +0000 (12:38 -0400)]
Fix a host of testcase failure issues. Still not done, but this is the end of syntactical changes. (Rest of fixes will be behavioral)

15 years agoMerged from John.
<jlsharps@mit.edu> [Fri, 17 Aug 2007 00:36:51 +0000 (20:36 -0400)]
Merged from John.

15 years agoImport new svn rubyvote (revno 43)
John Dong [Fri, 17 Aug 2007 00:23:05 +0000 (20:23 -0400)]
Import new svn rubyvote (revno 43)

15 years agoThrow an ArgumentError if invalid election name is passed to casting
John Dong [Fri, 17 Aug 2007 00:21:43 +0000 (20:21 -0400)]
Throw an ArgumentError if invalid election name is passed to casting

15 years agoXMLRPC Vote Casting Validation:
John Dong [Fri, 17 Aug 2007 00:20:16 +0000 (20:20 -0400)]
XMLRPC Vote Casting Validation:
  * Can only vote for candidate_id's within the current election
  * Can only rank each candidate once
  * Must rank all candidates

15 years agoUpdate TODO list
John Dong [Fri, 17 Aug 2007 00:05:40 +0000 (20:05 -0400)]
Update TODO list

15 years agoAdd XMLRPC interface for creating new quickvotes
John Dong [Thu, 16 Aug 2007 23:59:44 +0000 (19:59 -0400)]
Add XMLRPC interface for creating new quickvotes

15 years agoAdd XMLRPC API for getting an individual quickvote object; refactor getting all quick...
John Dong [Thu, 16 Aug 2007 23:41:12 +0000 (19:41 -0400)]
Add XMLRPC API for getting an individual quickvote object; refactor getting all quickvotes with this new method

15 years agolist_quickvotes XMLRPC returns candidate ID's instead of names
John Dong [Thu, 16 Aug 2007 23:33:49 +0000 (19:33 -0400)]
list_quickvotes XMLRPC returns candidate ID's instead of names

15 years agoAdd XMLRPC call for getting a list of all QuickVotes
John Dong [Thu, 16 Aug 2007 22:56:55 +0000 (18:56 -0400)]
Add XMLRPC call for getting a list of all QuickVotes

15 years agoAdd Google Map of voters
John Dong [Thu, 16 Aug 2007 22:26:41 +0000 (18:26 -0400)]
Add Google Map of voters
 * Add rails plugin for google maps
 * Add rails plugin for IP to location mapping

15 years agoMerge Justin
John Dong [Thu, 16 Aug 2007 21:15:06 +0000 (17:15 -0400)]
Merge Justin

15 years agoMerged from John's branch, includs a lot of IP lookup libraries.
<jlsharps@mit.edu> [Thu, 16 Aug 2007 21:09:46 +0000 (17:09 -0400)]
Merged from John's branch, includs a lot of IP lookup libraries.

15 years agoThe defeats lsit partial contains the display logic for the mehtod added to condorcet...
<jlsharps@mit.edu> [Thu, 16 Aug 2007 21:01:38 +0000 (17:01 -0400)]
The defeats lsit partial contains the display logic for the mehtod added to condorcet.rb taht helps print out a list of who defeated who and by how much. I also modified the tab;e in _pref_table.rhtml to use names as the table headers and notcandidate id's. Finally, results.rhtml has been updated to display them.

15 years agoAdd nil-guards to the graphs
John Dong [Thu, 16 Aug 2007 20:54:46 +0000 (16:54 -0400)]
Add nil-guards to the graphs

15 years agoDisplay IP address on unresolvable hosts
John Dong [Thu, 16 Aug 2007 20:38:28 +0000 (16:38 -0400)]
Display IP address on unresolvable hosts

15 years agoAdd ability to parse RIPE WHOIS too
John Dong [Thu, 16 Aug 2007 20:33:40 +0000 (16:33 -0400)]
Add ability to parse RIPE WHOIS too

15 years ago* Display DNS instead of IP address
John Dong [Thu, 16 Aug 2007 20:11:31 +0000 (16:11 -0400)]
* Display DNS instead of IP address
* Convert old DNS field to WHOIS OrganizationName field.
* Btter handle invalid IP's, including proper display of XMLRPC voters

15 years agoHTML escape description to prevent code injection onto page
John Dong [Thu, 16 Aug 2007 19:47:21 +0000 (15:47 -0400)]
HTML escape description to prevent code injection onto page

15 years agoDisallow identical candidates to be added to a quickvote. Differently cased identical...
John Dong [Thu, 16 Aug 2007 19:45:16 +0000 (15:45 -0400)]
Disallow identical candidates to be added to a quickvote. Differently cased identical strings are still allowed. This of course makes Asdf and asdf impossible to tell apart in the vote, which is kind of a bug. We should think of some way of differentiating those

15 years agoValidate that quickvote name is not an integer -- causes URL clash
John Dong [Thu, 16 Aug 2007 19:35:39 +0000 (15:35 -0400)]
Validate that quickvote name is not an integer -- causes URL clash

15 years agoAdded XMLRPC API to obtain list of voters
John Dong [Thu, 16 Aug 2007 18:28:22 +0000 (14:28 -0400)]
Added XMLRPC API to obtain list of voters

15 years agoUse WHOIS to search up meaningful organizational data about voters. NOTE: Probably...
John Dong [Thu, 16 Aug 2007 17:57:01 +0000 (13:57 -0400)]
Use WHOIS to search up meaningful organizational data about voters. NOTE: Probably destroys performance when there's >= 100 voters.

15 years agoAlso a part of the previous commit
John Dong [Thu, 16 Aug 2007 17:56:41 +0000 (13:56 -0400)]
Also a part of the previous commit

15 years ago* Tighter validation, closed a number of crashes due to invalid data
John Dong [Thu, 16 Aug 2007 17:54:37 +0000 (13:54 -0400)]
* Tighter validation, closed a number of crashes due to invalid data
* Security: Escape HTML to prevent injection of code onto the form
* Prevent empty candidates from passing validation
* Clearer, non Engrishy error messages on quickvote/create
* Prevent quickvote ident names from clashing with reserved controller actions

15 years agoFix crasher when nil is passed to ident_to_quickvote
John Dong [Thu, 16 Aug 2007 17:09:31 +0000 (13:09 -0400)]
Fix crasher when nil is passed to ident_to_quickvote

Benjamin Mako Hill || Want to submit a patch?